//
// Created by Criinal Nicole on 2020/6/17.
//

#ifndef FILESYSTEM_CONTROLLER_H
#define FILESYSTEM_CONTROLLER_H

#include "../BaseStructure/SuperNode.h"
#include "../BaseStructure/User.h"
#include "../BaseStructure/DirectoryBlock.h"
#include "../BaseStructure/FileIndexNode.h"
#include "../BaseStructure/Block.h"

namespace Controller {

//    储存结构
//        | 超级点 | 用户 | 目录 | 文件索引 | 文件块 |

//    用户地址
//    计算公式：
//              超级块大小 +
//              用户Id * 用户类大小
    int USER_OFFSET(int userId);

//    目录索引偏移地址
//    计算公式：
//              USER_OFFSET(最大用户数量) +
//              目录Id * 目录类大小
    int DICTIONARY_OFFSET(int dictionaryId);

//    文件索引偏移地址
//    计算公式：
//              DICTIONARY_OFFSET(最大目录数量) +
//              文件索引Id * 文件索引类大小
    int FILE_OFFSET(int fileId);

//    文件块偏移地址
//    计算公式：
//              FILE_OFFSET(最大文件索引数量) +
//              文件块Id * 文件块大小
    int BLOCK_OFFSET(int blockId);

//    当前节点所在的INode节点
    extern int curDictionaryInode;

    extern int lastINodeNum;

    extern int curUserId;

    void getLastINodeNum(int iNodeNum);

//    初始化函数
    void initialize();

    void format();

    void store();

}

#endif //FILESYSTEM_CONTROLLER_H
